#include <stdio.h>

#define AA 0
#define AB 1
#define AC -1
// or
enum _e
{
	ac = -1,
	aa = 0, 
	ab = 1,
};

void swen(int va)
{	
  /*4005fc:	a9be7bfd 	stp	x29, x30, [sp, #-32]!
  400600:	910003fd 	mov	x29, sp
  400604:	b9001fa0 	str	w0, [x29, #28]
  400608:	b9401fa0 	ldr	w0, [x29, #28]*/ 
	  switch (va) {

  /*40060c:	7100001f 	cmp	w0, #0x0
  400610:	54000140 	b.eq	400638 <swen+0x3c>  // b.none

  400614:	7100041f 	cmp	w0, #0x1
  400618:	540001a0 	b.eq	40064c <swen+0x50>  // b.none

  40061c:	3100041f 	cmn	w0, #0x1
  400620:	54000201 	b.ne	400660 <swen+0x64>  // b.any */ 

	default:
  /*400624:	90000000 	adrp	x0, 400000 <_init-0x480>
  400628:	911de000 	add	x0, x0, #0x778
  40062c:	b9401fa1 	ldr	w1, [x29, #28]
  400630:	97ffffb0 	bl	4004f0 <printf@plt>*/ 
	  printf("case default, va=%d\n", va);

  /*400634:	14000010 	b	400674 <swen+0x78>*/ 
	  break;

	case AA:	/* va == 0 */
  /*400638:	90000000 	adrp	x0, 400000 <_init-0x480>
  40063c:	911e4000 	add	x0, x0, #0x790
  400640:	b9401fa1 	ldr	w1, [x29, #28]
  400644:	97ffffab 	bl	4004f0 <printf@plt>*/ 
	  printf("case AA, va=%d\n", va);

  /*400648:	1400000b 	b	400674 <swen+0x78>*/ 
	  break;
	
	case AB:	/* va == 1 */
  /*40064c:	90000000 	adrp	x0, 400000 <_init-0x480>
  400650:	911ea000 	add	x0, x0, #0x7a8
  400654:	b9401fa1 	ldr	w1, [x29, #28]
  400658:	97ffffa6 	bl	4004f0 <printf@plt>*/ 
	  printf("case AB, va=%d\n", va);

  /*40065c:	14000006 	b	400674 <swen+0x78>*/ 
	  break;

	case AC:	/* va == -1 */
  /*400660:	90000000 	adrp	x0, 400000 <_init-0x480>
  400664:	911f0000 	add	x0, x0, #0x7c0
  400668:	b9401fa1 	ldr	w1, [x29, #28]
  40066c:	97ffffa1 	bl	4004f0 <printf@plt>*/ 
	  printf("case AC, va=%d\n", va);
	}

  /*400670:	d503201f 	nop
  400674:	d503201f 	nop
  400678:	a8c27bfd 	ldp	x29, x30, [sp], #32
  40067c:	d65f03c0 	ret*/ 
}

int main()
{
  /*400680:	a9be7bfd 	stp	x29, x30, [sp, #-32]!
  400684:	910003fd 	mov	x29, sp
  400688:	52800080 	mov	w0, #0x4*/                   	// #4
	int a = 4;

  /*40068c:	b9001fa0 	str	w0, [x29, #28]
  400690:	b9401fa0 	ldr	w0, [x29, #28]
  400694:	97ffffda 	bl	4005fc <swen>*/
	swen(a);

  /*400698:	52800020 	mov	w0, #0x1*/                   	// #1
	a = 1;

  /*40069c:	b9001fa0 	str	w0, [x29, #28]
  4006a0:	b9401fa0 	ldr	w0, [x29, #28]
  4006a4:	97ffffd6 	bl	4005fc <swen>*/
	swen(a);

  /*4006a8:	12800060 	mov	w0, #0xfffffffc*/            	// #-4
	a = -4;

  /*4006ac:	b9001fa0 	str	w0, [x29, #28]
  4006b0:	b9401fa0 	ldr	w0, [x29, #28]
  4006b4:	97ffffd2 	bl	4005fc <swen>*/
	swen(a);

  /*4006b8:	52800000 	mov	w0, #0x0                   	// #0
  4006bc:	a8c27bfd 	ldp	x29, x30, [sp], #32
  4006c0:	d65f03c0 	ret
  4006c4:	00000000 	.inst	0x00000000 ; undefined*/
	return 0;
}

